package com.example.chattingroom.component;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.net.http.WebSocket;
import java.util.concurrent.ConcurrentHashMap;

//此类用来记录用户的在线状况，  维护userId和Websocket之间的映射
@Component
public class OnlineUserManager {

    //这个哈希表需要考虑到线程安全问题
    private ConcurrentHashMap<Integer, WebSocketSession> sessions = new ConcurrentHashMap<>();

    //记录用户上线
    public void Online(int userId,WebSocketSession session)
    {
        if(sessions.get(userId)!=null){
            //如果能够获取到userId，说明此时该用户登录了，不能进行重复登录
            System.out.println("用户["+userId+"]目前在线，登录失败！");
        }
        sessions.put(userId,session);
        System.out.println("用户["+userId+"]上线！");
    }


    //记录用户下线,哈希表删去相对应的键值对
    public void Offline(int userId,WebSocketSession session)
    {
        WebSocketSession exitSession = sessions.get(userId);
        //进行匹配，如果两个session是同一个，才删掉哈希表中对应的键值对
        if(exitSession==session)
        {
            sessions.remove(userId);
            System.out.println("用户["+userId+"]下线！");
        }
    }

    public WebSocketSession getSession(int userId){return sessions.get(userId);}
}
